package com.catmiao.spark.rdd.persist

import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @title: Spark01_RDD_persist
 * @projectName spark_study
 * @description: TODO
 * @author ChengMiao
 * @date 2024/3/5 17:36
 */
object Spark01_RDD_persist {

  def main(args: Array[String]): Unit = {
    val sparkCon = new SparkConf().setMaster("local[*]").setAppName("rdd")

    val sparkContext = new SparkContext(sparkCon)


    val rdd = sparkContext.makeRDD(List("Hello World", "Hello Spark"))

    val flatMapRdd = rdd.flatMap(_.split(" "))


    val mapRdd = flatMapRdd.map(i => {
      println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")

      (i,1)
    })

    // 持久化 缓存 将数据放在内存中
    mapRdd.cache() // 存储在内存
    mapRdd.persist(StorageLevel.DISK_ONLY) // 保存在磁盘中，设置其他级别

    val result = mapRdd.reduceByKey(_ + _)

    // 触发后面的action算子时，该RDD将会被缓存在计算节点的内存中，供后续使用
    result.collect().foreach(println)

    println("================================")

    // rdd对象复用
    val groupRdd = mapRdd.groupByKey()

    groupRdd.collect().foreach(println)

    sparkContext.stop()
  }

}
